home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 31
/
Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso
/
Aminet
/
mus
/
midi
/
XGToolset5_src.lha
/
XGToolset_src
/
XGChorus
/
XGChorus.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-02-18
|
75KB
|
1,928 lines
/*
XG-Chorus-Editor V1.3
A Bars and Pipes tool for editing the CHXG-XG-board from YAMAHA.
Especially the chorus-effects with all parameters.
Use it together with the DB50XG.ptool form us.
© 1998 Alfred & Matthias Faust
The Tool-code based farly on the code for the "pc3.ptool" from Richard
Hagen. That's a very good tool, many thanks to him.
Richard has written his tool with DICE. We altered the code to compile
with the free GNU-C-compiler of the ADE. Especially the part was
transcripted, that place the imagedate in chip-RAM, because the
GNU-C-compiler hasn't as yet a keyword like DICE or other compiler for
this.
This code is released into the Public Domain, and may be freely
distributed in its original form.
It is supplied ``as is'', and comes with no warranty. This program code
was released because it might be useful as a starting point for other
programmers. However, if any damage arises from its use, the original
author and we will not be held liable.
You are free to use and modify this code to your heart's content, provided
you acknowledge me as the original author in any code that you might
distribute which is based largely on this code.
I acknowledge that the design of this tool is influenced strongly by the
example code supplied with the Rules for Tools package. However, I have
made substantial contributions of my own.
Matthias & Alfred Faust
j.k.dax@t-online.de
History:
1.3 (16.11.1998)
Initial Release.
1.0 - 1.2
overjumping, because all tools shall have the same version number
1.4 (18.2.1999)
all slidervalues will be "remembered" if tool is placed in the
pipeline and stored with the song, reloaded and worked away.
*/
#include "bars.h"
#include "myheader.h" // from R.Hagen
#include <libraries/dos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <exec/memory.h>
#include <exec/execbase.h>
#include <exec/types.h>
#include <string.h>
#include <intuition/intuition.h>
char version[]="\0$VER:XG-Chorus-Edit 1.4 (18.2.1999) © Alfred & Matthias Faust";
#define CHXG_NAME "XG-Chorus-Edit"
#define CHXG_ID 0x43485847
#define CHXG_TYPE (TOOL_NORMAL | TOOL_NOTPAD)
// Hall-Effects 300 ->
#define chorus1 0
#define chorus2 1
#define chorus3 2
#define chorus4 3
#define celeste1 4
#define celeste2 5
#define celeste3 6
#define celeste4 7
#define flanger1 8
#define flanger2 9
#define flanger3 10
extern struct ExecBase * SysBase;
/* the litte Icon in the pipeline */
UWORD *CHXG=NULL;
static UWORD CHXGdata[] =
{
/* Plane 0 */
0x7FFF,0xFE00,
0x7FFF,0xFE00,
0x7FFF,0xFE00,
0x7EDB,0x7E00,
0x7C99,0x3E00,
0x707E,0x0E00,
0x707E,0x0E00,
0x7C99,0x3E00,
0x7EDB,0x7E00,
0x7FFF,0xFE00,
0x7FFF,0xFE00,
0x7FFF,0xFE00,
/* Plane 1 */
0x0000,0x0200,
0x0000,0x0600,
0x1FFF,0xFE00,
0x1FFF,0xFE00,
0x9FFF,0xFF00,
0x93FF,0xCF00,
0x93FF,0xCF00,
0x9FFF,0xFF00,
0x1FFF,0xFE00,
0x1FFF,0xFE00,
0x1FFF,0xFE00,
0x3FFF,0xFE00,
/* Plane 2 */
0x0000,0x0000,
0x0000,0x0000,
0x1FFF,0xF800,
0x1FC3,0xF800,
0x1FA5,0xF800,
0x1F18,0xF800,
0x1F18,0xF800,
0x1FA5,0xF800,
0x1FC3,0xF800,
0x1FFF,0xF800,
0x0000,0x0000,
0x0000,0x0000
};
static struct Image CHXG_image = {
0, 0,
24 , 12 , 3 ,
NULL,
0x1f, 0x00,
NULL
};
//Definitions of the gadgets
#define CHTYPE_GADGET 1
#define CHTYPEDOWN_GADGET 2
#define CHTYPEUP_GADGET 3
#define CHLFOFREQ_GADGET 4
#define CHLFOFREQDOWN_GADGET 5
#define CHLFOFREQUP_GADGET 6
#define CHLFOPMDEPTH_GADGET 7
#define CHLFOPMDEPTHDOWN_GADGET 8
#define CHLFOPMDEPTHUP_GADGET 9
#define CHFEEDBLEVEL_GADGET 10
#define CHFEEDBLEVELDOWN_GADGET 11
#define CHFEEDBLEVELUP_GADGET 12
#define CHDELAYOFFSET_GADGET 13
#define CHDELAYOFFSETDOWN_GADGET 14
#define CHDELAYOFFSETUP_GADGET 15
#define CHEQLOWFREQ_GADGET 16
#define CHEQLOWFREQDOWN_GADGET 17
#define CHEQLOWFREQUP_GADGET 18
#define CHEQLOWGAIN_GADGET 19
#define CHEQLOWGAINDOWN_GADGET 20
#define CHEQLOWGAINUP_GADGET 21
#define CHEQHIGHFREQ_GADGET 22
#define CHEQHIGHFREQDOWN_GADGET 23
#define CHEQHIGHFREQUP_GADGET 24
#define CHEQHIGHGAIN_GADGET 25
#define CHEQHIGHGAINDOWN_GADGET 26
#define CHEQHIGHGAINUP_GADGET 27
#define CHDRYWET_GADGET 31
#define CHDRYWETDOWN_GADGET 32
#define CHDRYWETUP_GADGET 33
#define CHRETURN_GADGET 34
#define CHRETURNDOWN_GADGET 35
#define CHRETURNUP_GADGET 36
#define CHPAN_GADGET 37
#define CHPANDOWN_GADGET 38
#define CHPANUP_GADGET 39
#define CHSNDCHORREV_GADGET 40
#define CHSNDCHORREVDOWN_GADGET 41
#define CHSNDCHORREVUP_GADGET 42
#define CHINPUT_GADGET 43
#define CHINPUTDOWN_GADGET 44
#define CHINPUTUP_GADGET 45
#define CHLFOPHASEDIFF_GADGET 46
#define CHLFOPHASEDIFFDOWN_GADGET 47
#define CHLFOPHASEDIFFUP_GADGET 48
#define WRITE_GADGET 49
//all the gadgets
/* Chorus-Type-Gadget */
struct PropInfo CHXGGadget1SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage1 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText1 = {
2, 0, JAM1, -78, 1, NULL, " Type", NULL
};
struct Gadget CHXGGadget1 = {
NULL, 85, 31, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage1, NULL, &CHXGIText1, NULL, (APTR)&CHXGGadget1SInfo, CHTYPE_GADGET, NULL
};
/* Chorus-LFO-Frequence-Gadget */
struct PropInfo CHXGGadget2SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage2 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText2 = {
2, 0, JAM1, -78, 1, NULL, " LFO Freq", NULL
};
struct Gadget CHXGGadget2 = {
&CHXGGadget1, 85, 42, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage2, NULL, &CHXGIText2, NULL, (APTR)&CHXGGadget2SInfo, CHLFOFREQ_GADGET, NULL
};
/* Chorus-LFO-phasemodulation-Depth-Gadget */
struct PropInfo CHXGGadget3SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage3 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText3 = {
2, 0, JAM1, -78, 1, NULL, "LFOpmDpth", NULL
};
struct Gadget CHXGGadget3 = {
&CHXGGadget2, 85, 53, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage3, NULL, &CHXGIText3, NULL, (APTR)&CHXGGadget3SInfo, CHLFOPMDEPTH_GADGET, NULL
};
//Chorus-Feedback-Level-Gadget
struct PropInfo CHXGGadget4SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage4 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText4 = {
2, 0, JAM1, -78, 1, NULL, "FeedbkLvl", NULL
};
struct Gadget CHXGGadget4 = {
&CHXGGadget3, 85, 64, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage4, NULL, &CHXGIText4, NULL, (APTR)&CHXGGadget4SInfo, CHFEEDBLEVEL_GADGET, NULL
}; // CHFEEDBLEVEL_GADGET
//Chorus-Delay-Offset-Gadget
struct PropInfo CHXGGadget5SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage5 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText5 = {
2, 0, JAM1, -78, 1, NULL, "DelayOffs", NULL
};
struct Gadget CHXGGadget5 = {
&CHXGGadget4, 85, 75, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage5, NULL, &CHXGIText5, NULL, (APTR)&CHXGGadget5SInfo, CHDELAYOFFSET_GADGET, NULL
}; //CHDELAYOFFSET_GADGET
//Chorus-Equalizer-Low-Frequence-Gadget
struct PropInfo CHXGGadget6SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage6 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText6 = {
2, 0, JAM1, -78, 1, NULL, "EqLowFreq", NULL
};
struct Gadget CHXGGadget6 = {
&CHXGGadget5, 85, 86, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage6, NULL, &CHXGIText6, NULL, (APTR)&CHXGGadget6SInfo, CHEQLOWFREQ_GADGET, NULL
}; //CHEQLOWFREQ_GADGET
//Chorus-Equalizer-Low-Gain-Gadget
struct PropInfo CHXGGadget7SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage7 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText7 = {
2, 0, JAM1, -78, 1, NULL, "EqLowGain", NULL
};
struct Gadget CHXGGadget7 = {
&CHXGGadget6, 85, 97, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage7, NULL, &CHXGIText7, NULL, (APTR)&CHXGGadget7SInfo, CHEQLOWGAIN_GADGET, NULL
}; //CHEQLOWGAIN_GADGET
//Chorus-Equalizer-High-Frequence-Gadget
struct PropInfo CHXGGadget8SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage8 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText8 = {
2, 0, JAM1, -78, 1, NULL, " EqHiFreq", NULL
};
struct Gadget CHXGGadget8 = {
&CHXGGadget7, 85, 108, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage8, NULL, &CHXGIText8, NULL, (APTR)&CHXGGadget8SInfo, CHEQHIGHFREQ_GADGET, NULL
}; //CHEQHIGHFREQ_GADGET
//Chorus-Equalizer-High-Gain-Gadget
struct PropInfo CHXGGadget9SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage9 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct IntuiText CHXGIText9 = {
2, 0, JAM1, -78, 1, NULL, " EqHiGain", NULL
};
struct Gadget CHXGGadget9 = {
&CHXGGadget8, 85, 119, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage9, NULL, &CHXGIText9, NULL, (APTR)&CHXGGadget9SInfo, CHEQHIGHGAIN_GADGET, NULL
}; //CHEQHIGHGAIN_GADGET
//Chorus-Dry/Wet-Gadget
struct PropInfo CHXGGadget10SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage10 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget10 = {
&CHXGGadget9, 85, 130, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage10, NULL, NULL, NULL, (APTR)&CHXGGadget10SInfo, CHDRYWET_GADGET, NULL
}; //CHDRYWET_GADGET
//Chorus-Return-Gadget
struct PropInfo CHXGGadget11SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage11 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget11 = {
&CHXGGadget10, 85, 141, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage11, NULL, NULL, NULL, (APTR)&CHXGGadget11SInfo, CHRETURN_GADGET, NULL
}; //CHRETURN_GADGET
//Chorus-Pan-Gadget
struct PropInfo CHXGGadget12SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage12 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget12 = {
&CHXGGadget11, 85, 152, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage12, NULL, NULL, NULL, (APTR)&CHXGGadget12SInfo, CHPAN_GADGET, NULL
}; //CHPAN_GADGET
//Chorus-Send-Chorus-to-Reverb-Gadget
struct PropInfo CHXGGadget13SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage13 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget13 = {
&CHXGGadget12, 85, 163, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage13, NULL, NULL, NULL, (APTR)&CHXGGadget13SInfo, CHSNDCHORREV_GADGET, NULL
}; //CHSNDCHORREV_GADGET
//Chorus-Input-Gadget
struct PropInfo CHXGGadget14SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage14 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget14 = {
&CHXGGadget13, 85, 174, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage14, NULL, NULL, NULL, (APTR)&CHXGGadget14SInfo, CHINPUT_GADGET, NULL
}; //CHINPUT_GADGET
//Chorus-LFO-Phase-Difference-Gadget
struct PropInfo CHXGGadget15SInfo = {
AUTOKNOB+FREEHORIZ, -16384, -1, 16384, -1,
};
struct Image CHXGImage15 = {
0, 0, 102, 6, 0, NULL, 0x0000, 0x0000, NULL
};
struct Gadget CHXGGadget15 = {
&CHXGGadget14, 85, 185, 150, 9, GFLG_GADGHBOX|GFLG_GADGHIMAGE, RELVERIFY|GADGIMMEDIATE, PROPGADGET,
(APTR)&CHXGImage15, NULL, NULL, NULL, (APTR)&CHXGGadget15SInfo, CHLFOPHASEDIFF_GADGET, NULL
}; //CHLFOPHASEDIFF_GADGET
/* Write gadget. */
struct IntuiText CHXGIText16 = {
4,0,JAM1,4,2,NULL,"Write",NULL
};
struct Gadget CHXGGadget16 = {
&CHXGGadget15,110,208,50,11,GFLG_GADGHBOX|GFLG_GADGHIMAGE,RELVERIFY|GADGIMMEDIATE,BOOLGADGET,
(APTR)NULL,NULL,&CHXGIText16,NULL,NULL,WRITE_GADGET,NULL
};
//the mainwindowstructure
struct NewWindow CHXGNewWindowStructure1 = {
214, 167,
275, 233,
0, 6,
GADGETDOWN|GADGETUP|CLOSEWINDOW,
WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE|NOCAREREFRESH,
&CHXGGadget16,
NULL,
"XGChorus-Editor",
NULL,
NULL,
5, 5,
-1, -1,
CUSTOMSCREEN
};
struct CHXGTool {
struct Tool tool;
UBYTE chortype;
UBYTE chorlfofrequence;
UBYTE chorlfopmdepth;
UBYTE chorfeedbacklevel;
UBYTE chordelayoffset;
UBYTE choreqlowfreq;
UBYTE choreqlowgain;
UBYTE choreqhighfreq;
UBYTE choreqhighgain;
UBYTE chordrywet;
UBYTE chorreturn;
UBYTE chorpan;
UBYTE chorsndchorrev;
UBYTE chorinput;
UBYTE chorlfophasediff;
char storage1[32];
char storage2[32];
char storage3[32];
char storage4[32];
char storage5[32];
char storage6[32];
char storage7[32];
char storage8[32];
char storage9[32];
char storage10[32];
char storage11[32];
char storage12[32];
char storage13[32];
char storage14[32];
char storage15[32];
char *chortypesysex;
char *chorlfofrequencesysex;
char *chorlfopmdepthsysex;
char *chorfeedbacklevelsysex;
char *chordelayoffsetsysex;
char *choreqlowfreqsysex;
char *choreqlowgainsysex;
char *choreqhighfreqsysex;
char *choreqhighgainsysex;
char *chordrywetsysex;
char *chorreturnsysex;
char *chorpansysex;
char *chorsndchorrevsysex;
char *chorinputsysex;
char *chorlfophasediffsysex;
};
static struct ToolMaster master;
extern struct Functions *functions;
//initial values
static void CHXG_tool_init(struct CHXGTool *tool)
{
tool->chorlfofrequence= 0x06;
tool->chorlfopmdepth= 0x36;
tool->chorfeedbacklevel= 0x4d;
tool->chordelayoffset= 0x6a;
tool->choreqlowfreq= 0x14;
tool->choreqlowgain= 0x0c;
tool->choreqhighfreq= 0x12;
tool->choreqhighgain= 0x0c;
tool->chordrywet= 0x40;
tool->chorreturn= 0x40;
tool->chorpan= 0x40;
tool->chorsndchorrev= 0x00;
tool->chorinput= 0x00;
tool->chorlfophasediff= 0x00;
tool->chortypesysex = NULL;
tool->chorlfofrequencesysex = NULL;
tool->chorlfopmdepthsysex = NULL;
tool->chorfeedbacklevelsysex = NULL;
tool->chordelayoffsetsysex = NULL;
tool->choreqlowfreqsysex = NULL;
tool->choreqlowgainsysex = NULL;
tool->choreqhighfreqsysex = NULL;
tool->choreqhighgainsysex = NULL;
tool->chordrywetsysex = NULL;
tool->chorreturnsysex = NULL;
tool->chorpansysex = NULL;
tool->chorsndchorrevsysex = NULL;
tool->chorinputsysex = NULL;
tool->chorlfophasediffsysex = NULL;
tool->tool.touched = TOUCH_INIT;
}
static BOOL lock_clip(struct Clip *clip)
{
Forbid();
if (clip->locked == 0)
{
clip->locked = 1;
Permit();
return TRUE;
}
else
{
Permit();
return FALSE;
}
}
static void unlock_clip(struct Clip *clip)
{
clip->locked = 0;
}
static struct Event * __saveds processeventcode(struct Event *event)
{
event->tool = event->tool->next;
return(event);
}
//writes sysex into track
static void __saveds insertsysex(char *buff, short size, struct CHXGTool *tool, const LONG time)
{
struct StringEvent *event;
struct String *string;
event = (struct StringEvent *) (*functions->allocevent)();
if (event)
{
string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
if (string)
{
event->next = NULL;
event->string = string;
memcpy(string->string, buff, size);
string->length = size + 2;
event->type = EVENT_SYSX;
event->status = MIDI_SYSX;
event->time = time;
event->tool = tool->tool.next;
if (lock_clip(&(tool->tool.track->clip)))
{
event->next = (struct StringEvent *)tool->tool.track->clip.events.first;
tool->tool.track->clip.events.first = (struct Event *)(*functions->sorteventlist)(event);
unlock_clip(&(tool->tool.track->clip));
}
else
{
(*functions->freelist)(event);
}
}
}
}
// the routine for sending SysEx-data thru the pipeline
static void __saveds sendsysex(char *buff, short size, struct CHXGTool *tool, const LONG time)
{
struct StringEvent *event;
struct String *string;
event = (struct StringEvent *) (*functions->allocevent)();
if (event)
{
string = (struct String *) (*functions->myalloc)(size + 3, MEMF_CLEAR);
if (string)
{
event->string = string;
memcpy(string->string, buff, size);
string->length = size + 2;
event->type = EVENT_SYSX;
event->status = MIDI_SYSX;
event->time = time;
event->tool = tool->tool.next;
WaitTOF();
(*functions->qevent)(event);
(*functions->myfree)(string);
}
}
}
static void __saveds trans_hx(struct CHXGTool *tool, const LONG time, char *sysx, int sw)
{
LONG size;
int a, b, x, y ;
UBYTE abuf[32];
char chr[4];
char *zbuf = NULL;
//translate sysexbuffer into hex
size = strlen(sysx);
zbuf = (char *)AllocVec(size+2, MEMF_ANY|MEMF_CLEAR);
if(zbuf)
{
CopyMem(sysx, zbuf, size);
b=0;
for(a=0;a < size;a=a+2)
{
chr[0] = zbuf[a];
chr[1] = zbuf[a+1];
x=(isdigit((int)chr[0]))? (chr[0]&0xF) : ((chr[0]&0xDF)-55); //this is the
y=(isdigit((int)chr[1]))? (chr[1]&0xF) : ((chr[1]&0xDF)-55); //the translate-core
abuf[b++] = ((x<<4)|y); //writing with bitmanipulation
}
//send hexdata
FreeVec(zbuf);
if (sw == 0) sendsysex(abuf, b, tool, time);
if (sw == 1) insertsysex(abuf, b, tool, time);
}
}
// Writes all values of the sliders and more in the main window
LONG __saveds display_routine(struct Window *window, struct Gadget *gadget, ULONG value)
{
char text[10];
char *chortypet, *chordrywett, *chorreturnt, *chorpant, *chorsndchorrevt,
*chorinputt, *chorlfophasedifft, *inputt;
char chortypetext[10];
char chordrywettext[10];
char chorreturntext[10];
char chorpantext[10];
char chorsndchorrevtext[10];
char chorlfophasedifftext[10];
char chorinputtext[10];
char inputtext[4];
char input[2][2] ={"M ","S "};
const short id = gadget->GadgetID;
struct RastPort *rp = window->RPort;
char name[15];
int i=0;
char chortypename[11][8]={
"Chorus 1","Chorus 2","Chorus 3","Chorus 4","Celeste1","Celeste2","Celeste3",
"Celeste4","Flanger1","Flanger2","Flanger3"};
switch (id)
{
case CHTYPE_GADGET:
chortypet = chortypename[value];
sprintf(chortypetext, "%8.8s", chortypet);
SetAPen(rp, 7);
SetBPen(rp, 6);
SetDrMd(rp, INVERSVID|JAM2);
Move(rp, 83, 26);
Text(rp, chortypetext, 8);
SetAPen(rp, 2);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
if (value == chorus1)
{
chordrywett = " Dry<->Wet";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = "ChrReturn";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = "ChorusPan";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = "SndCh>Rev";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == chorus2)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == chorus3)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == chorus4)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == celeste1)
{
chordrywett = " Dry<->Wet";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = "ChrReturn";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = "ChorusPan";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = "SndCh>Rev";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == celeste2)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == celeste3)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = "ChrReturn";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == celeste4)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " Input";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = " ";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == flanger1)
{
chordrywett = " Dry<->Wet";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = "ChrReturn";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = "ChorusPan";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = "SndCh>Rev";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " ";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = "LFOPhDiff";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == flanger2)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " ";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = "LFOPhDiff";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
else if (value == flanger3)
{
chordrywett = " ";
sprintf(chordrywettext, "%9.9s", chordrywett);
Move(rp, 7, 136);
Text(rp, chordrywettext, 9);
chorreturnt = " ";
sprintf(chorreturntext, "%9.9s", chorreturnt);
Move(rp, 7, 147);
Text(rp, chorreturntext, 9);
chorpant = " ";
sprintf(chorpantext, "%9.9s", chorpant);
Move(rp, 7, 158);
Text(rp, chorpantext, 9);
chorsndchorrevt = " ";
sprintf(chorsndchorrevtext, "%9.9s", chorsndchorrevt);
Move(rp, 7, 169);
Text(rp, chorsndchorrevtext, 9);
chorinputt = " ";
sprintf(chorinputtext, "%9.9s", chorinputt);
Move(rp, 7, 180);
Text(rp, chorinputtext, 9);
chorlfophasedifft = "LFOPhDiff";
sprintf(chorlfophasedifftext, "%9.9s", chorlfophasedifft);
Move(rp, 7, 191);
Text(rp, chorlfophasedifftext, 9);
SetAPen(rp, 1);
}
Move(rp, 240, 37);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHLFOFREQ_GADGET:
Move(rp, 240, 48);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHLFOPMDEPTH_GADGET:
Move(rp, 240, 59);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHFEEDBLEVEL_GADGET:
if (value == 0) value = 1;
Move(rp, 240, 70);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHDELAYOFFSET_GADGET:
Move(rp, 240, 81);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHEQLOWFREQ_GADGET:
Move(rp, 240, 92);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value + 8);
Text(rp, text, 3);
break;
case CHEQLOWGAIN_GADGET:
Move(rp, 240, 103);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value + 52);
Text(rp, text, 3);
break;
case CHEQHIGHFREQ_GADGET:
Move(rp, 240, 114);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value + 28);
Text(rp, text, 3);
break;
case CHEQHIGHGAIN_GADGET:
Move(rp, 240, 125);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value + 52);
Text(rp, text, 3);
break;
case CHDRYWET_GADGET:
if (value == 0) value = 1;
Move(rp, 240, 136);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHRETURN_GADGET:
Move(rp, 240, 147);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHPAN_GADGET:
Move(rp, 240, 158);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHSNDCHORREV_GADGET:
Move(rp, 240, 169);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value);
Text(rp, text, 3);
break;
case CHINPUT_GADGET:
inputt = input[value];
Move(rp, 255, 180);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(inputtext, "%.2s", inputt);
Text(rp, inputtext, 2);
break;
case CHLFOPHASEDIFF_GADGET:
Move(rp, 240, 191);
SetAPen(rp, 1);
SetBPen(rp, 0);
SetDrMd(rp, JAM2);
sprintf(text, "%3ld", value + 4);
Text(rp, text, 3);
break;
default:
break;
}
return value;
}
//to hear the changes
static void send_note(struct CHXGTool *tool, const long time, const UBYTE note)
{
struct NoteEvent *on_event = (struct NoteEvent *)(*functions->allocevent)();
if (on_event)
{
struct NoteEvent *off_event = (struct NoteEvent *)(*functions->allocevent)();
if (off_event)
{
on_event->next =
off_event->next = NULL;
on_event->type =
off_event->type = EVENT_VOICE;
on_event->status = MIDI_NOTEON;
off_event->status = MIDI_NOTEOFF;
on_event->value =
off_event->value = note;
on_event->velocity = 80;
on_event->time = time;
off_event->time = time + 96;
on_event->tool =
off_event->tool = tool->tool.next;
(*functions->qevent)(on_event);
(*functions->qevent)(off_event);
}
else
{
(*functions->freeevent)(on_event);
}
}
}
static void initvalues(struct Window *window, struct CHXGTool *tool, int init, UBYTE typeswitch)
{
int i;
int initval[]={
0x06,0x36,0x4d,0x6a,0x14,0x0c,0x12,0x0c,0x40,0x40,0x40,0x00,0x00,0x00, //Chorus1
0x08,0x3f,0x40,0x1e,0x14,0x0a,0x0e,0x06,0x40,0x00,0x00,0x00,0x00,0x00, //Chorus2
0x04,0x2c,0x40,0x6e,0x14,0x0c,0x12,0x0e,0x40,0x00,0x00,0x00,0x00,0x00, //Chorus3
0x07,0x20,0x45,0x68,0x14,0x0c,0x12,0x0c,0x40,0x00,0x00,0x00,0x01,0x00, //Chorus4
0x0c,0x20,0x40,0x00,0x14,0x0c,0x12,0x0c,0x7f,0x40,0x40,0x00,0x00,0x00, //Celeste1
0x1c,0x12,0x5a,0x02,0x14,0x0a,0x0e,0x08,0x54,0x00,0x00,0x00,0x00,0x00, //Celeste2
0x04,0x3f,0x2c,0x02,0x14,0x0c,0x12,0x10,0x7f,0x00,0x00,0x00,0x00,0x00, //Celeste3
0x07,0x1d,0x40,0x00,0x14,0x0c,0x17,0x0e,0x7f,0x00,0x00,0x00,0x01,0x00, //Celeste4
0x0e,0x0e,0x68,0x02,0x14,0x0c,0x12,0x0c,0x60,0x40,0x40,0x00,0x00,0x00, //Flanger1
0x20,0x11,0x1a,0x02,0x14,0x0c,0x12,0x08,0x60,0x00,0x00,0x00,0x00,0x00, //Flanger2
0x03,0x6d,0x6d,0x02,0x14,0x0c,0x12,0x0c,0x7f,0x00,0x00,0x00,0x00,0x00 }; //Flanger3
if (typeswitch == 1)
{
tool->chorlfofrequence = (UBYTE)initval[0+(init*14)];
tool->chorlfopmdepth = (UBYTE)initval[1+(init*14)];
tool->chorfeedbacklevel = (UBYTE)initval[2+(init*14)];
tool->chordelayoffset = (UBYTE)initval[3+(init*14)];
tool->choreqlowfreq = (UBYTE)initval[4+(init*14)];
tool->choreqlowgain = (UBYTE)initval[5+(init*14)];
tool->choreqhighfreq = (UBYTE)initval[6+(init*14)];
tool->choreqhighgain = (UBYTE)initval[7+(init*14)];
tool->chordrywet = (UBYTE)initval[8+(init*14)];
tool->chorreturn = (UBYTE)initval[9+(init*14)];
tool->chorpan = (UBYTE)initval[10+(init*14)];
tool->chorsndchorrev = (UBYTE)initval[11+(init*14)];
tool->chorinput = (UBYTE)initval[12+(init*14)];
tool->chorlfophasediff = (UBYTE)initval[13+(init*14)];
}
(*functions->ModifyEmbossedProp)(window, CHLFOFREQ_GADGET, tool->chorlfofrequence, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHLFOPMDEPTH_GADGET, tool->chorlfopmdepth, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHFEEDBLEVEL_GADGET, tool->chorfeedbacklevel, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHDELAYOFFSET_GADGET, tool->chordelayoffset, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHEQLOWFREQ_GADGET, tool->choreqlowfreq, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHEQLOWGAIN_GADGET, tool->choreqlowgain, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHEQHIGHFREQ_GADGET, tool->choreqhighfreq, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHEQHIGHGAIN_GADGET, tool->choreqhighgain, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHDRYWET_GADGET, tool->chordrywet, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHRETURN_GADGET, tool->chorreturn, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHPAN_GADGET, tool->chorpan, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHSNDCHORREV_GADGET, tool->chorsndchorrev, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHINPUT_GADGET, tool->chorinput, 0, 0, 0, 0, 0);
(*functions->ModifyEmbossedProp)(window, CHLFOPHASEDIFF_GADGET, tool->chorlfophasediff, 0, 0, 0, 0, 0);
for (i = CHLFOFREQ_GADGET; i <= CHLFOPHASEDIFF_GADGET; i += 3)
{
(*functions->DrawEmbossedProp)(window, i);
}
}
//the center off all
static void __saveds edittoolcode(struct CHXGTool *tool)
{
struct IntuiMessage *message;
struct Window *window;
LONG class, code, time;
struct Gadget *gadget;
struct NewWindow *newwindow;
int i, ini, revres=0;
char *chortypebt, *storagebt;
char chortypebyte[11][4] ={
"4100", "4101", "4102", "4108", "4200", "4201", "4202", "4208", "4300", "4301", "4308"};
CHXGNewWindowStructure1.Screen = functions->screen;
if (tool->tool.touched & TOUCH_EDIT)
{
CHXGNewWindowStructure1.LeftEdge = tool->tool.left;
CHXGNewWindowStructure1.TopEdge = tool->tool.top;
CHXGNewWindowStructure1.Width = tool->tool.width;
CHXGNewWindowStructure1.Height = tool->tool.height;
tool->chortypesysex = tool->storage1;
tool->chorlfofrequencesysex = tool->storage2;
tool->chorlfopmdepthsysex = tool->storage3;
tool->chorfeedbacklevelsysex = tool->storage4;
tool->chordelayoffsetsysex = tool->storage5;
tool->choreqlowfreqsysex = tool->storage6;
tool->choreqlowgainsysex = tool->storage7;
tool->choreqhighfreqsysex = tool->storage8;
tool->choreqhighgainsysex = tool->storage9;
tool->chordrywetsysex = tool->storage10;
tool->chorreturnsysex = tool->storage11;
tool->chorpansysex = tool->storage12;
tool->chorsndchorrevsysex = tool->storage13;
tool->chorinputsysex = tool->storage14;
tool->chorlfophasediffsysex = tool->storage15;
}
if (!tool->tool.touched)
{
CHXG_tool_init(tool);
}
newwindow = (struct NewWindow *) (*functions->DupeNewWindow)(&CHXGNewWindowStructure1);
if (!newwindow)
{
return;
}
newwindow->Title = 0;
newwindow->Flags |= BORDERLESS;
newwindow->Flags &= ~0xF;
newwindow->BlockPen = 0;
newwindow->DetailPen = 0;
window = (struct Window *) (*functions->FlashyOpenWindow)(newwindow);
if (!window) return;
tool->tool.window = window;
(*functions->EmbossWindowOn)(window, WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG, CHXG_NAME, (short)-1, (short)-1, 0, 0);
(*functions->FatEmbossedPropOn)(window, CHTYPE_GADGET, CHTYPEDOWN_GADGET,
CHTYPEUP_GADGET, (void *)display_routine, 11, 1);
(*functions->FatEmbossedPropOn)(window, CHLFOFREQ_GADGET, CHLFOFREQDOWN_GADGET,
CHLFOFREQUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHLFOPMDEPTH_GADGET, CHLFOPMDEPTHDOWN_GADGET,
CHLFOPMDEPTHUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHFEEDBLEVEL_GADGET, CHFEEDBLEVELDOWN_GADGET,
CHFEEDBLEVELUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHDELAYOFFSET_GADGET, CHDELAYOFFSETDOWN_GADGET,
CHDELAYOFFSETUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHEQLOWFREQ_GADGET, CHEQLOWFREQDOWN_GADGET,
CHEQLOWFREQUP_GADGET, (void *)display_routine, 21, 1);
(*functions->FatEmbossedPropOn)(window, CHEQLOWGAIN_GADGET, CHEQLOWGAINDOWN_GADGET,
CHEQLOWGAINUP_GADGET, (void *)display_routine, 25, 1);
(*functions->FatEmbossedPropOn)(window, CHEQHIGHFREQ_GADGET, CHEQHIGHFREQDOWN_GADGET,
CHEQHIGHFREQUP_GADGET, (void *)display_routine, 31, 1);
(*functions->FatEmbossedPropOn)(window, CHEQHIGHGAIN_GADGET, CHEQHIGHGAINDOWN_GADGET,
CHEQHIGHGAINUP_GADGET, (void *)display_routine, 25, 1);
(*functions->FatEmbossedPropOn)(window, CHDRYWET_GADGET, CHDRYWETDOWN_GADGET,
CHDRYWETUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHRETURN_GADGET, CHRETURNDOWN_GADGET,
CHRETURNUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHPAN_GADGET, CHPANDOWN_GADGET,
CHPANUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHSNDCHORREV_GADGET, CHSNDCHORREVDOWN_GADGET,
CHSNDCHORREVUP_GADGET, (void *)display_routine, 128, 1);
(*functions->FatEmbossedPropOn)(window, CHINPUT_GADGET, CHINPUTDOWN_GADGET,
CHINPUTUP_GADGET, (void *)display_routine, 2, 1);
(*functions->FatEmbossedPropOn)(window, CHLFOPHASEDIFF_GADGET, CHLFOPHASEDIFFDOWN_GADGET,
CHLFOPHASEDIFFUP_GADGET, (void *)display_routine, 121, 1);
(*functions->EmbossOn)(window, WRITE_GADGET, 1);
(*functions->ModifyEmbossedProp)(window, CHTYPE_GADGET, tool->chortype, 0, 0, 0, 0, 0);
(*functions->DrawEmbossedProp)(window, CHTYPE_GADGET);
initvalues(window, tool, (int)tool->chortype, 0);
send_note(tool, functions->timenow, 60);
for (;;)
{
message = (struct IntuiMessage *) (*functions->GetIntuiMessage)(window);
class = message->Class;
code = message->Code;
gadget = (struct Gadget *) message->IAddress;
class = (*functions->SystemGadgets)(window, class, gadget, code);
ReplyMsg((struct Message *)message);
if (class == CLOSEWINDOW)
{
break;
}
else if (class == GADGETDOWN)
{
const short id = gadget->GadgetID;
switch (id)
{
case CHTYPE_GADGET:
tool->chortype = (UBYTE) (*functions->DragEmbossedProp)(window, CHTYPE_GADGET);
chortypebt = chortypebyte[tool->chortype];
sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
tool->chortypesysex = tool->storage1;
time = functions->timenow;
trans_hx(tool, time, tool->chortypesysex, 0);
ini = (int)tool->chortype;
initvalues(window, tool, ini,1);
break;
case CHTYPEDOWN_GADGET:
tool->chortype = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHTYPE_GADGET, -1, 0);
chortypebt = chortypebyte[tool->chortype];
sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
tool->chortypesysex = tool->storage1;
time = functions->timenow;
trans_hx(tool, time, tool->chortypesysex, 0);
ini = (int)tool->chortype;
initvalues(window, tool, ini,1);
break;
case CHTYPEUP_GADGET:
tool->chortype = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHTYPE_GADGET, 1, 0);
chortypebt = chortypebyte[tool->chortype];
sprintf(tool->storage1, "F043104C020120%.4sF7",chortypebt);
tool->chortypesysex = tool->storage1;
time = functions->timenow;
trans_hx(tool, time, tool->chortypesysex, 0);
ini = (int)tool->chortype;
initvalues(window, tool, ini,1);
break;
case CHLFOFREQ_GADGET:
tool->chorlfofrequence = (UBYTE) (*functions->DragEmbossedProp)(window, CHLFOFREQ_GADGET);
sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
tool->chorlfofrequencesysex = tool->storage2;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfofrequencesysex, 0);
break;
case CHLFOFREQDOWN_GADGET:
tool->chorlfofrequence = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOFREQ_GADGET, -1, 0);
sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
tool->chorlfofrequencesysex = tool->storage2;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfofrequencesysex, 0);
break;
case CHLFOFREQUP_GADGET:
tool->chorlfofrequence = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOFREQ_GADGET, 1, 0);
sprintf(tool->storage2, "F043104C020122%02lxF7",tool->chorlfofrequence);
tool->chorlfofrequencesysex = tool->storage2;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfofrequencesysex, 0);
break;
case CHLFOPMDEPTH_GADGET:
tool->chorlfopmdepth = (UBYTE) (*functions->DragEmbossedProp)(window, CHLFOPMDEPTH_GADGET);
sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
tool->chorlfopmdepthsysex = tool->storage3;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfopmdepthsysex, 0);
break;
case CHLFOPMDEPTHDOWN_GADGET:
tool->chorlfopmdepth = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOPMDEPTH_GADGET, -1, 0);
sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
tool->chorlfopmdepthsysex = tool->storage3;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfopmdepthsysex, 0);
break;
case CHLFOPMDEPTHUP_GADGET:
tool->chorlfopmdepth = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOPMDEPTH_GADGET, 1, 0);
sprintf(tool->storage3, "F043104C020123%02lxF7",tool->chorlfopmdepth);
tool->chorlfopmdepthsysex = tool->storage3;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfopmdepthsysex, 0);
break;
case CHFEEDBLEVEL_GADGET:
tool->chorfeedbacklevel = (UBYTE) (*functions->DragEmbossedProp)(window, CHFEEDBLEVEL_GADGET);
sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
tool->chorfeedbacklevelsysex = tool->storage4;
time = functions->timenow;
trans_hx(tool, time, tool->chorfeedbacklevelsysex, 0);
break;
case CHFEEDBLEVELDOWN_GADGET:
tool->chorfeedbacklevel = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHFEEDBLEVEL_GADGET, -1, 0);
sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
tool->chorfeedbacklevelsysex = tool->storage4;
time = functions->timenow;
trans_hx(tool, time, tool->chorfeedbacklevelsysex, 0);
break;
case CHFEEDBLEVELUP_GADGET:
tool->chorfeedbacklevel = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHFEEDBLEVEL_GADGET, 1, 0);
sprintf(tool->storage4, "F043104C020124%02lxF7",tool->chorfeedbacklevel);
tool->chorfeedbacklevelsysex = tool->storage4;
time = functions->timenow;
trans_hx(tool, time, tool->chorfeedbacklevelsysex, 0);
break;
case CHDELAYOFFSET_GADGET:
tool->chordelayoffset = (UBYTE) (*functions->DragEmbossedProp)(window, CHDELAYOFFSET_GADGET);
sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
tool->chordelayoffsetsysex = tool->storage5;
time = functions->timenow;
trans_hx(tool, time, tool->chordelayoffsetsysex, 0);
break;
case CHDELAYOFFSETDOWN_GADGET:
tool->chordelayoffset = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHDELAYOFFSET_GADGET, -1, 0);
sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
tool->chordelayoffsetsysex = tool->storage5;
time = functions->timenow;
trans_hx(tool, time, tool->chordelayoffsetsysex, 0);
break;
case CHDELAYOFFSETUP_GADGET:
tool->chordelayoffset = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHDELAYOFFSET_GADGET, 1, 0);
sprintf(tool->storage5, "F043104C020125%02lxF7",tool->chordelayoffset);
tool->chordelayoffsetsysex = tool->storage5;
time = functions->timenow;
trans_hx(tool, time, tool->chordelayoffsetsysex, 0);
break;
case CHEQLOWFREQ_GADGET:
tool->choreqlowfreq = (UBYTE) (*functions->DragEmbossedProp)(window, CHEQLOWFREQ_GADGET);
sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
tool->choreqlowfreqsysex = tool->storage6;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowfreqsysex, 0);
break;
case CHEQLOWFREQDOWN_GADGET:
tool->choreqlowfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQLOWFREQ_GADGET, -1, 0);
sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
tool->choreqlowfreqsysex = tool->storage6;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowfreqsysex, 0);
break;
case CHEQLOWFREQUP_GADGET:
tool->choreqlowfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQLOWFREQ_GADGET, 1, 0);
sprintf(tool->storage6, "F043104C020127%02lxF7",(tool->choreqlowfreq)+8);
tool->choreqlowfreqsysex = tool->storage6;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowfreqsysex, 0);
break;
case CHEQLOWGAIN_GADGET:
tool->choreqlowgain = (UBYTE) (*functions->DragEmbossedProp)(window, CHEQLOWGAIN_GADGET);
sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
tool->choreqlowgainsysex = tool->storage7;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowgainsysex, 0);
break;
case CHEQLOWGAINDOWN_GADGET:
tool->choreqlowgain = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQLOWGAIN_GADGET, -1, 0);
sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
tool->choreqlowgainsysex = tool->storage7;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowgainsysex, 0);
break;
case CHEQLOWGAINUP_GADGET:
tool->choreqlowgain = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQLOWGAIN_GADGET, 1, 0);
sprintf(tool->storage7, "F043104C020128%02lxF7",(tool->choreqlowgain)+52);
tool->choreqlowgainsysex = tool->storage7;
time = functions->timenow;
trans_hx(tool, time, tool->choreqlowgainsysex, 0);
break;
case CHEQHIGHFREQ_GADGET:
tool->choreqhighfreq = (UBYTE) (*functions->DragEmbossedProp)(window, CHEQHIGHFREQ_GADGET);
sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
tool->choreqhighfreqsysex = tool->storage8;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighfreqsysex, 0);
break;
case CHEQHIGHFREQDOWN_GADGET:
tool->choreqhighfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQHIGHFREQ_GADGET, -1, 0);
sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
tool->choreqhighfreqsysex = tool->storage8;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighfreqsysex, 0);
break;
case CHEQHIGHFREQUP_GADGET:
tool->choreqhighfreq = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQHIGHFREQ_GADGET, 1, 0);
sprintf(tool->storage8, "F043104C020129%02lxF7",(tool->choreqhighfreq)+28);
tool->choreqhighfreqsysex = tool->storage8;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighfreqsysex, 0);
break;
case CHEQHIGHGAIN_GADGET:
tool->choreqhighgain = (UBYTE) (*functions->DragEmbossedProp)(window, CHEQHIGHGAIN_GADGET);
sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
tool->choreqhighgainsysex = tool->storage9;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighgainsysex, 0);
break;
case CHEQHIGHGAINDOWN_GADGET:
tool->choreqhighgain = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQHIGHGAIN_GADGET, -1, 0);
sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
tool->choreqhighgainsysex = tool->storage9;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighgainsysex, 0);
break;
case CHEQHIGHGAINUP_GADGET:
tool->choreqhighgain = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHEQHIGHGAIN_GADGET, 1, 0);
sprintf(tool->storage9, "F043104C02012a%02lxF7",(tool->choreqhighgain)+52);
tool->choreqhighgainsysex = tool->storage9;
time = functions->timenow;
trans_hx(tool, time, tool->choreqhighgainsysex, 0);
break;
case CHDRYWET_GADGET:
tool->chordrywet = (UBYTE) (*functions->DragEmbossedProp)(window, CHDRYWET_GADGET);
sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
tool->chordrywetsysex = tool->storage10;
time = functions->timenow;
trans_hx(tool, time, tool->chordrywetsysex, 0);
break;
case CHDRYWETDOWN_GADGET:
tool->chordrywet = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHDRYWET_GADGET, -1, 0);
sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
tool->chordrywetsysex = tool->storage10;
time = functions->timenow;
trans_hx(tool, time, tool->chordrywetsysex, 0);
break;
case CHDRYWETUP_GADGET:
tool->chordrywet = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHDRYWET_GADGET, 1, 0);
sprintf(tool->storage10, "F043104C02012b%02lxF7",tool->chordrywet);
tool->chordrywetsysex = tool->storage10;
time = functions->timenow;
trans_hx(tool, time, tool->chordrywetsysex, 0);
break;
case CHRETURN_GADGET:
tool->chorreturn = (UBYTE) (*functions->DragEmbossedProp)(window, CHRETURN_GADGET);
sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
tool->chorreturnsysex = tool->storage11;
time = functions->timenow;
trans_hx(tool, time, tool->chorreturnsysex, 0);
break;
case CHRETURNDOWN_GADGET:
tool->chorreturn = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHRETURN_GADGET, -1, 0);
sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
tool->chorreturnsysex = tool->storage11;
time = functions->timenow;
trans_hx(tool, time, tool->chorreturnsysex, 0);
break;
case CHRETURNUP_GADGET:
tool->chorreturn = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHRETURN_GADGET, 1, 0);
sprintf(tool->storage11, "F043104C02012c%02lxF7",tool->chorreturn);
tool->chorreturnsysex = tool->storage11;
time = functions->timenow;
trans_hx(tool, time, tool->chorreturnsysex, 0);
break;
case CHPAN_GADGET:
tool->chorpan = (UBYTE) (*functions->DragEmbossedProp)(window, CHPAN_GADGET);
sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
tool->chorpansysex = tool->storage12;
time = functions->timenow;
trans_hx(tool, time, tool->chorpansysex, 0);
break;
case CHPANDOWN_GADGET:
tool->chorpan = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHPAN_GADGET, -1, 0);
sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
tool->chorpansysex = tool->storage12;
time = functions->timenow;
trans_hx(tool, time, tool->chorpansysex, 0);
break;
case CHPANUP_GADGET:
tool->chorpan = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHPAN_GADGET, 1, 0);
sprintf(tool->storage12, "F043104C02012d%02lxF7",tool->chorpan);
tool->chorpansysex = tool->storage12;
time = functions->timenow;
trans_hx(tool, time, tool->chorpansysex, 0);
break;
case CHSNDCHORREV_GADGET:
tool->chorsndchorrev = (UBYTE) (*functions->DragEmbossedProp)(window, CHSNDCHORREV_GADGET);
sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
tool->chorsndchorrevsysex = tool->storage13;
time = functions->timenow;
trans_hx(tool, time, tool->chorsndchorrevsysex, 0);
break;
case CHSNDCHORREVDOWN_GADGET:
tool->chorsndchorrev = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHSNDCHORREV_GADGET, -1, 0);
sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
tool->chorsndchorrevsysex = tool->storage13;
time = functions->timenow;
trans_hx(tool, time, tool->chorsndchorrevsysex, 0);
break;
case CHSNDCHORREVUP_GADGET:
tool->chorsndchorrev = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHSNDCHORREV_GADGET, 1, 0);
sprintf(tool->storage13, "F043104C02012e%02lxF7",tool->chorsndchorrev);
tool->chorsndchorrevsysex = tool->storage13;
time = functions->timenow;
trans_hx(tool, time, tool->chorsndchorrevsysex, 0);
break;
case CHINPUT_GADGET:
tool->chorinput = (UBYTE) (*functions->DragEmbossedProp)(window, CHINPUT_GADGET);
sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
tool->chorinputsysex = tool->storage14;
time = functions->timenow;
trans_hx(tool, time, tool->chorinputsysex, 0);
break;
case CHINPUTDOWN_GADGET:
tool->chorinput = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHINPUT_GADGET, -1, 0);
sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
tool->chorinputsysex = tool->storage14;
time = functions->timenow;
trans_hx(tool, time, tool->chorinputsysex, 0);
break;
case CHINPUTUP_GADGET:
tool->chorinput = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHINPUT_GADGET, 1, 0);
sprintf(tool->storage14, "F043104C020134%02lxF7",tool->chorinput);
tool->chorinputsysex = tool->storage14;
time = functions->timenow;
trans_hx(tool, time, tool->chorinputsysex, 0);
break;
case CHLFOPHASEDIFF_GADGET:
tool->chorlfophasediff = (UBYTE) (*functions->DragEmbossedProp)(window, CHLFOPHASEDIFF_GADGET);
sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
tool->chorlfophasediffsysex = tool->storage15;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfophasediffsysex, 0);
break;
case CHLFOPHASEDIFFDOWN_GADGET:
tool->chorlfophasediff = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOPHASEDIFF_GADGET, -1, 0);
sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
tool->chorlfophasediffsysex = tool->storage15;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfophasediffsysex, 0);
break;
case CHLFOPHASEDIFFUP_GADGET:
tool->chorlfophasediff = (UBYTE) (*functions->ShiftEmbossedProp)(window, CHLFOPHASEDIFF_GADGET, 1, 0);
sprintf(tool->storage15, "F043104C020133%02lxF7",(tool->chorlfophasediff)+4);
tool->chorlfophasediffsysex = tool->storage15;
time = functions->timenow;
trans_hx(tool, time, tool->chorlfophasediffsysex, 0);
break;
case WRITE_GADGET:
if ((*functions->areyousure)("write to track ? Play-pointer on right place?"))
{
if (!functions->running)
{
time = functions->starttime;
if (tool->chortypesysex != NULL) trans_hx(tool, time, tool->chortypesysex , 1);
if (tool->chorlfofrequencesysex != NULL) trans_hx(tool, time+1, tool->chorlfofrequencesysex , 1);
if (tool->chorlfopmdepthsysex != NULL) trans_hx(tool, time+2, tool->chorlfopmdepthsysex , 1);
if (tool->chorfeedbacklevelsysex != NULL) trans_hx(tool, time+3, tool->chorfeedbacklevelsysex , 1);
if (tool->chordelayoffsetsysex != NULL) trans_hx(tool, time+4, tool->chordelayoffsetsysex , 1);
if (tool->choreqlowfreqsysex != NULL) trans_hx(tool, time+5, tool->choreqlowfreqsysex , 1);
if (tool->choreqlowgainsysex != NULL) trans_hx(tool, time+6, tool->choreqlowgainsysex , 1);
if (tool->choreqhighfreqsysex != NULL) trans_hx(tool, time+7, tool->choreqhighfreqsysex , 1);
if (tool->choreqhighgainsysex != NULL) trans_hx(tool, time+9, tool->choreqhighgainsysex , 1);
if (tool->chordrywetsysex != NULL) trans_hx(tool, time+10, tool->chordrywetsysex , 1);
if (tool->chorreturnsysex != NULL) trans_hx(tool, time+11, tool->chorreturnsysex , 1);
if (tool->chorpansysex != NULL) trans_hx(tool, time+12, tool->chorpansysex , 1);
if (tool->chorsndchorrevsysex != NULL) trans_hx(tool, time+13, tool->chorsndchorrevsysex , 1);
if (tool->chorinputsysex != NULL) trans_hx(tool, time+14, tool->chorinputsysex , 1);
if (tool->chorlfophasediffsysex != NULL) trans_hx(tool, time+15, tool->chorlfophasediffsysex , 1);
}
break;
}
else {
break;
}
}
send_note(tool, functions->timenow, 60);
}
else if (class == GADGETUP)
{
// Nothing.
}
}
tool->tool.window = 0;
tool->tool.left = window->LeftEdge;
tool->tool.top = window->TopEdge;
tool->tool.width = window->Width;
tool->tool.height = window->Height;
tool->tool.touched = TOUCH_INIT | TOUCH_EDIT;
/*
for (i = CHTYPE_GADGET; i <= CHLFOPHASEDIFF_GADGET; i += 3)
{
(*functions->FatEmbossedPropOff)(window, i, i + 1, i + 2);
}
*/
(*functions->FatEmbossedPropOff)(window, CHTYPE_GADGET, CHTYPEDOWN_GADGET, CHTYPEUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHLFOFREQ_GADGET, CHLFOFREQDOWN_GADGET, CHLFOFREQUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHLFOPMDEPTH_GADGET, CHLFOPMDEPTHDOWN_GADGET, CHLFOPMDEPTHUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHFEEDBLEVEL_GADGET, CHFEEDBLEVELDOWN_GADGET, CHFEEDBLEVELUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHDELAYOFFSET_GADGET, CHDELAYOFFSETDOWN_GADGET, CHDELAYOFFSETUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHEQLOWFREQ_GADGET, CHEQLOWFREQDOWN_GADGET, CHEQLOWFREQUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHEQLOWGAIN_GADGET, CHEQLOWGAINDOWN_GADGET, CHEQLOWGAINUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHEQHIGHFREQ_GADGET, CHEQHIGHFREQDOWN_GADGET, CHEQHIGHFREQUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHEQHIGHGAIN_GADGET, CHEQHIGHGAINDOWN_GADGET, CHEQHIGHGAINUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHDRYWET_GADGET, CHDRYWETDOWN_GADGET, CHDRYWETUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHRETURN_GADGET, CHRETURNDOWN_GADGET, CHRETURNUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHPAN_GADGET, CHPANDOWN_GADGET, CHPANUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHSNDCHORREV_GADGET, CHSNDCHORREVDOWN_GADGET, CHSNDCHORREVUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHINPUT_GADGET, CHINPUTDOWN_GADGET, CHINPUTUP_GADGET);
(*functions->FatEmbossedPropOff)(window, CHLFOPHASEDIFF_GADGET, CHLFOPHASEDIFFDOWN_GADGET, CHLFOPHASEDIFFUP_GADGET);
(*functions->EmbossOff)(window, WRITE_GADGET);
(*functions->EmbossWindowOff)(window);
(*functions->FlashyCloseWindow)(window);
(*functions->DeleteNewWindow)(newwindow);
}
//to leave the tool correct
void __saveds removetool()
{
FreeVec(CHXG);
}
//start of the tool
struct ToolMaster * inittoolmaster()
{
if (!(CHXG=(UWORD *)AllocVec(sizeof (CHXGdata), MEMF_CHIP|MEMF_CLEAR))) return(NULL);
CopyMem(&CHXGdata, CHXG, sizeof (CHXGdata));
memset((char *)&master, 0, sizeof(struct ToolMaster));
CHXG_image.ImageData = CHXG;
master.toolid = CHXG_ID;
master.image = &CHXG_image;
strcpy(master.name, CHXG_NAME);
master.edittool = edittoolcode;
master.processevent = processeventcode;
master.tooltype = CHXG_TYPE;
master.toolsize = sizeof(struct CHXGTool);
master.removetool = removetool;
return(&master);
}